The first web applications were largely server-based with little or no functionality implemented by dedicated applications executing at end-user client computing devices. Transitions between application states were mainly accomplished with request/response round-trips over a network between end-user devices and server devices. Typically, a web browser executing on an end-user device would send, to a server device, a Hypertext Transfer Protocol (HTTP) request specifying a Web address (e.g., a URL) that identified the next user interface state (e.g., a new web page). In response, the server device would send, back to the end-user device, a HTTP response including Hypertext Markup Language (HTML) content of the requested user interface state. The web browser would then update a user interface (e.g., a web page window) displayed at the end-user computing device based on the received HTML content. With the first web applications, logging information about application behavior and user interaction with such applications was relatively simple because overall application functionality was centralized on the server-side.
With the ever-increasing computing power and capabilities of end-user devices, however, more and more application functionality is being implemented by dedicated software designed to execute on end-user devices. One class of dedicated software applications designed to run on portable computing devices, such as mobile phones, tablet computers, and other mobile devices, are commonly known as “mobile applications”. Today, mobile applications are available that perform a wide-variety of different functions. As just a few examples, there are mobile applications for general productivity, information retrieval, playing games, checking e-mail, calendaring, banking, and many others.
Many mobile applications can transition between some application states without having to interact with a server. Because of this, developers of mobile applications often have little insight into how their applications behave for users and how and where users interact with their applications. Such insight is valuable to developers, for example, to improve the functionality of the applications they offer. For example, a developer of a mobile application might want to know which operating system platform the application is most often used on, which features of the application are most often used, which features are rarely used, which countries the application is used in, which features cause the application to crash or generate errors, among other usage information.
For many developers, the ability to capture information about the runtime behavior and user interaction with their mobile applications would be useful to gain the desired insight into how their applications behave for users and how and where users interact with their applications. Accordingly, there is a need for portable computing devices with more efficient methods for collecting information about the runtime behavior and user interaction with mobile applications executing on the devices. Such methods should reduce the performance impact on end-user facing functions of the applications. For battery-operated portable computing devices, such methods should conserve power and increase the time between battery charges.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.